package com.itwn.email.producer.e_topic;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 主题模式
 * 1、通过交换机发送消息,且指定路由key, 支持通配符模式
 * 2、交换机 - 队列 - 路由key
 *      交换机： topic.exchange
 *      队列： topic.queue1   路由key： china.#
 *      队列： topic.queue2   路由key： *.news
 */
@Configuration
public class TopicConfig {
    public static final String TOPIC_EXCHANGE = "topic.exchange";
    public static final String TOPIC_QUEUE1 = "topic.queue1";
    public static final String TOPIC_QUEUE2 = "topic.queue2";

    //1、创建交换机： topic.exchange
    @Bean
    public TopicExchange topicExchange(){
        return new TopicExchange(TOPIC_EXCHANGE);
    }

    //2、创建队列： topic.queue1
    @Bean
    public Queue topicQueue1(){
        return new Queue(TOPIC_QUEUE1, true,false, false);
    }

    //3、创建队列： topic.queue2
    @Bean
    public Queue topicQueue2(){
        return new Queue(TOPIC_QUEUE2, true,false, false);
    }

    //4、绑定队列（topic.queue1）到交换机（topic.exchange）
    @Bean
    public Binding bindingTopicExchangeAndQueue1(Queue topicQueue1,TopicExchange topicExchange){
        return BindingBuilder.bind(topicQueue1).to(topicExchange).with("china.#");
    }

    //5、绑定队列（direct.queue2）到交换机（direct.exchange）
    @Bean
    public Binding bindingTopicExchangeAndQueue2(@Qualifier("topicQueue2") Queue myqueue, TopicExchange topicExchange){
        return BindingBuilder.bind(myqueue)
                .to(topicExchange).with("*.news");
    }

}
